Рабочий процесс идентификации системы
Идентификация — это процесс построения математической модели динамического объекта на основе экспериментальных данных.
Pkg.add(["DataFrames", "CSV", "ControlSystemIdentification"])
using DataFrames, CSV, ControlSystemIdentification;
Примерный рабочий процесс идентификации выглядит следующим образом:
Сначала необходимо провести эксперимент для сбора данных системы. Затем выбирается структура модели, которую мы хотим подогнать под эти данные и алгоритм идентификации. Далее полученные данные «подгоняются» под выбранную структуру. Результат идентификации проверяется на валидационном наборе данных. Если результат идентификации оказывается неудовлетворительным, необходимо вернуться назад и изменить структуру модели или алгоритм идентификации.
Сбор данных эксперимента
В первую очередь для идентификации необходимо получить данные эксперимента. В этом примере данные эксперимента загружаются в Engee из CSV файла. Мы разделим экспериментальные данные на 2 части: первую будем использовать для идентификации, вторую для валидации.
Import_data = "data.csv"
table = CSV.read(Import_data, DataFrame);
inputdata = Float64.(table[:, 2]);
outputdata = Float64.(table[:, 3]);
Данные для идентификации:
Ts = 0.1;
identdata = iddata(outputdata[1:Int32(end/2)], inputdata[1:Int32(end/2)], Ts);
plot(identdata)
Данные для валидации:
valdata = iddata(outputdata[Int32(end/2):end], inputdata[Int32(end/2):end], Ts);
plot(valdata)
Выбор структуры модели и идентификация
Будем идентифицировать линейную стационарную систему в пространстве состояний. Для начала выберем порядок системы равным 1.
nx = 1; # порядок системы
res = subspaceid(identdata, nx; verbose=true)
Валидация модели
simplot(valdata, res)
Как мы видим, идентифицированная модель недостаточно воспроизводит динамику реальной системы.
Изменение структуры модели и идентификация
Вернемся на шаг назад и изменим структуру модели. Пусть на этот раз порядок системы будет равен 2.
nx = 2; # порядок системы
res = subspaceid(identdata, nx; verbose=true)
Валидация модели
simplot(valdata, res)
На этот раз точность идентификации нас устраивает.
Вывод
В этом примере мы познакомились с рабочим процессом идентификации системы на основе данных эксперимента, полученных из CSV таблицы.